package com.test.tool.demo.websocket;

import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.simp.SimpMessageType;
import org.springframework.messaging.support.ChannelInterceptor;
import org.springframework.messaging.support.GenericMessage;

import java.nio.charset.StandardCharsets;

/**
 * 自定义消息发送拦截器
 *
 * @author 小八
 * @date 2022年04月25日15:43
 */
@Slf4j
public class WebSocketConnectInterceptor implements ChannelInterceptor {

    /**
     * 消息发送前
     *
     * @param message 消息
     * @param channel 信道
     * @return 处理过的消息
     */
    @SuppressWarnings("rawtypes")
    @Override
    public Message<?> preSend(Message<?> message, MessageChannel channel) {
        //CONNECT_ACK 帧 这里往连接成功确认帧里注入了一个sessionId 暂未使用,可用于解决有个账号
        if (SimpMessageType.CONNECT_ACK.equals(message.getHeaders().get("simpMessageType"))) {
            return new GenericMessage(((String) message.getHeaders().get("simpSessionId")).getBytes(StandardCharsets.UTF_8), message.getHeaders());
        }
        return message;
    }

}
